package com.jintu.portal.jpa;

import com.jintu.portal.pojo.bean.BaseEntity;
import com.jintu.portal.pojo.bean.Pageable;
import com.jintu.portal.pojo.bean.Pagination;
import com.jintu.portal.pojo.bean.QLBuilder;

import java.io.Serializable;
import java.util.List;

public interface BaseDao<T extends BaseEntity, ID extends Serializable> {

	public void insert(T t);
//
	public void update(T t);
//
//	public void delete(ID id);
//
	public T get(ID id);

//	public int executeBySql(String sql, Object... params);
//
//	public int executeByJpql(String jpql, Object... params);
//
//	public int deleteByJpql(QLBuilder ql);

	public <T> T findOneByJpql(QLBuilder ql);

//	public <T> T findOneByJpql(String jpql, Object... params);
//
//	public <T> T findOneBySql(String sql, Class<T> clz, Object... params);
//
	public <T> List<T> findManyByJpql(QLBuilder ql);
//
//	public <T> List<T> findManyByJpql(String jpql, Object... params);
//
	public <T> List<T> findManyBySql(String sql, Class<T> clz, Object... params);
//
//	public <T> List<T> findLimitByJpql(QLBuilder ql, Integer limit);
//
//	public <T> List<T> findLimitByJpql(String jpql, Integer limit, Object... params);
//
//	public <T> List<T> findLimitBySql(String sql, Class<T> clz, Integer limit, Object... params);
//
//	public <T> Pagination<T> findPageByJpql(QLBuilder ql, Pageable pageable);
//
//	public <T> Pagination<T> findPageByJpql(String jpql, Pageable pageable, Object... params);
//
//	public <T> Pagination<T> findPageBySql(String sql, Pageable pageable, Class<T> clz, Object... params);
//
//	public List findBySql(String sql);

//	public JPASQLQuery jpaSqlQuery();
}
